package com.drg.center.entity;

import com.drg.center.entity.result.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * Es-病历信息实体类
 *
 * @author zhangxilin
 * @since 2024-11-27
 */
@Data
@Document(indexName = "index_his_case")
public class PatientCaseEsPO implements Serializable {


    /************************************入院信息********************************************/
    /**
     * 病例号
     */
    @Id
    private String caseCode;

    /**
     * 入院科室编号
     */
    private String departCode;

    /**
     * 入院科室名称
     */
    private String departName;

    /**
     * 入院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime inHospitalDate;

    /**
     * 住院号
     */
    private String inpatientCode;
    /**
     * 床位号
     */
    private String bedCode;
    /**
     * 医生编码
     */
    private String doctorCode;

    /**
     * 医生姓名
     */
    private String doctorName;
    /**
     * 医生组编码
     */
    private String doctorGroupCode;
    /**
     * 医生组姓名
     */
    private String doctorGroupName;


    /************************************DRG信息********************************************/
    /**
     * drg分组编码 ＋
     */
    private String drgCode;

    /**
     * drg分组名称 ＋
     */
    private String drgName;

    /**
     * DRG组权重 +
     */
    private BigDecimal weightInDrg;

    /**
     * 基准点数 +
     */
    private BigDecimal basisPoints;

    /**
     * 倍率（2：高倍率， 1： 低倍率）+
     */
    private Integer magnification;

    /**
     * 病历点数 +
     */
    private BigDecimal casePoints;

    /**
     * RW值 +
     */
    private BigDecimal rw;

    /**
     * DRG类型（0：其他，1：不伴并发症与合并症病例数，2：伴并发症与合并症病例数，3：伴严重并发症与合并症病例数） +
     */
    private Integer drgType;

    /************************************医保DRG信息********************************************/
    /**
     * drg分组编码 ＋
     */
    private String drgYbCode;

    /**
     * drg分组名称 ＋
     */
    private String drgYbName;

    /**
     * DRG组权重 +
     */
    private BigDecimal weightYbInDrg;

    /**
     * 基准点数 +
     */
    private BigDecimal basisYbPoints;

    /**
     * 倍率（2：高倍率， 1： 低倍率）+
     */
    private Integer magnificationYb;

    /**
     * 病历点数 +
     */
    private BigDecimal caseYbPoints;

    /**
     * RW值 +
     */
    private BigDecimal rwYb;

    /**
     * 医保结算费用 +
     */
    private BigDecimal settleMoney;


    /************************************出院信息********************************************/
    /**
     * 是否已出院 ＋
     */
    private Boolean hasOut;

    /**
     * 出院科室编号 ＋
     */
    private String outDepartCode;

    /**
     * 出院科室名称 ＋
     */
    private String outDepartName;

    /**
     * 出院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime outHospitalDate;

    /**
     * 总费用
     */
    private BigDecimal totalCost;

    /**
     * 预计费用 +
     */
    private BigDecimal expectCost;


    /**
     * 结算日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime settleDate;

    /**
     * 结算费用 ＋
     */
    private BigDecimal totalSettleCost;

    /**
     * 基金费用 ＋
     */
    private BigDecimal fundCost;

    /**
     * 实际盈亏(正数表示盈利， 负数表示亏损) +
     */
    private BigDecimal profit;

    /**
     * 预测盈亏(正数表示盈利， 负数表示亏损) +
     */
    private BigDecimal expectProfit;

    /**
     * 超支费用 +
     */
    private BigDecimal overExpectCost;

    /**
     * 住院天数
     */
    private Integer inpatientDays;

    /**
     * 离院方式（1.医嘱离院，2.医嘱转院、转社区、转卫生院机构，3.非遗嘱离院，4.死亡，9.其他）
     */
    private String outType;

    /**
     * outType为2时，拟接收机构代码
     */
    private String acceptCode;

    /**
     * outType为2时，拟接收机构名称
     */
    private String acceptName;

    /**
     * 死亡风险（1：低风险死亡 2:中低风险死亡 3: 中高风险死亡 4:高风险死亡  ）+
     */
    private Integer dealthRisk;

    /**
     * 是否手术 +
     */
    private Boolean hasOperation;

    /**
     * 是否超长住院病历 +
     */
    private Boolean isOverlengthIn;

    /**
     * 是否低标入院风险病例 +
     */
    private Boolean isLowStandardIn;


    /************************************问题病历信息********************************************/
    /**
     * 是否正常病历 +
     */
    private Boolean isNormalCase;

    /**
     * 是否诊断问题 +
     */
    private Boolean isDiagnosisProblem;

    /**
     * 是否手术问题 +
     */
    private Boolean isOperationProblem;

    /**
     * 是否中医操作项目问题 +
     */
    private Boolean isTraditionalProblem;

    /**
     * 是否预警 +
     */
    private Boolean isWarn;


    /************************************其他信息*******************************************/

    /**
     * 就诊日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime visitDate;

    /**
     * 慢特病门诊科室编号
     */
    private String specialDepartCode;

    /**
     * 慢特病门诊科室名称
     */
    private String specialDepartName;

    /**
     * 慢特病就诊日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime specialVisitDate;

    /**
     * 药品费用
     */
    private BigDecimal medicineCost;

    /**
     * 耗材费用
     */
    private BigDecimal consumablesCost;
    /**
     * 住院费用
     */
    private BigDecimal inHospitalCost;

    /**
     * 手术费用
     */
    private BigDecimal operationCost;


    /**
     * 麻醉费用
     */
    private BigDecimal anesthesiaCost;

    /**
     * 检查费用
     */
    private BigDecimal inspectCost;

    /**
     * 检验费用
     */
    private BigDecimal testCost;

    /**
     * 其他费用 +
     */
    private BigDecimal otherCost;

    /**
     * 医疗类型（1.住院，2.日间手术）
     */
    private String treatType;

    /**
     * 治疗类别（1.西医，2.中医-2.1中医；2.2.民族医，3.中西医）
     */
    private String treatClass;

    /**
     * 入院途径（1.急诊，2.门诊，3.其他医疗机构转入，9.其他）
     */
    private String intoChannel;

    /**
     * 呼吸机使用时间
     */
    private String ventilatorUseTime;

    /**
     * 入院前颅脑损伤病人昏迷时间
     */
    private String beforeComaTime;

    /**
     * 入院后颅脑损伤病人昏迷时间
     */
    private String afterComaTime;

    /**
     * 输血品种
     */
    private String transBloodVariety;

    /**
     * 输血量
     */
    private String transBloodQuantity;

    /**
     * 输血计量单位
     */
    private String transBloodUnit;

    /**
     * 特级护理天数
     */
    private Integer premiumCareDays;

    /**
     * 一级护理天数
     */
    private Integer firstCareDays;

    /**
     * 二级护理天数
     */
    private Integer secondCareDays;

    /**
     * 三级护理天数
     */
    private Integer thirdCareDays;

    /**
     * 是否有离院31天再住院计划
     */
    private Boolean isContinue;

    /**
     * 再住院目的
     */
    private String continuePurpose;

    /**
     * 门诊中医诊断
     */
    private String chinaDiagnosis;

    /**
     * 门诊中医诊断疾病代码
     */
    private String chinaDiseaseCode;

    /**
     * 门诊西医诊断
     */
    private String westernDiagnosis;

    /**
     * 门诊西医诊断疾病代码
     */
    private String westernDiseaseCode;

    /**
     * 结算期间开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate settleStartDate;

    /**
     * 结算期间结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private LocalDate settleEndDate;

    /**
     * 结算业务流水号
     */
    private String businessNo;

    /**
     * 医保支付方式（1.按项目，2.单病种，3.按病种分值，4.疾病诊断相关分组DRG，5.按床日，6.按人头，9.其他）
     */
    private String payType;

    /**
     * 医疗机构填报部门
     */
    private String submitDept;

    /**
     * 医疗机构填报人
     */
    private String submitPerson;

    /**
     * 患者信息
     */
    private PatientCasePersonInfoVO personInfoVO;

    /**
     * 重症监护信息列表
     */
    private List<PatientCaseCustodyVO> custodyVOS;

    /**
     * 诊断信息列表
     */
    private List<PatientCaseDiagnosisVO> diagnosisVOS;

    /**
     * 手术操作信息列表
     */
    private List<PatientCaseOperationVO> operationVOS;

    /**
     * 慢特病诊断信息列表
     */
    private List<PatientCaseDiagnosisVO> specialDiagnosisVOS;

    /**
     * 慢特病手术操作信息列表
     */
    private List<PatientCaseOperationVO> specialOperationVOS;

    /**
     * 费用明细信息列表
     */
    private List<PatientCaseCostVO> costVOS;

    /************************************项目信息*******************************************/
    /**
     * 亏损因素
     */
    private String lossReason;

    /**
     * 超支影响
     */
    private String overEffect;

    /**
     * 医嘱信息列表
     */
    private List<PatientCaseAdviceVO> adviceVOS;

    /**
     * 医疗收费信息列表
     */
    private List<TreatCostVO> treatCostVOS;

    /**
     * 基金支付信息列表
     */
    private List<FundCostVO> fundCostVOS;

    /**
     * 个人支付信息列表
     */
    private List<SelfCostVO> selfCostVOS;

    /************************************超额金额*******************************************/
    /**
     * 科室控制标准超额金额
     */
    private BigDecimal controlStandard;

    /**
     * 科室总额预付超额金额
     */
    private BigDecimal prePayTotal;

    /**
     * 科室单病种付费超额金额
     */
    private BigDecimal caseBasedPayment;
    /**
     * 医生控制标准超额金额
     */
    private BigDecimal controlStandardDoctor;

    /**
     * 医生总额预付超额金额
     */
    private BigDecimal prePayTotalDoctor;

    /**
     * 医生单病种付费超额金额
     */
    private BigDecimal caseBasedPaymentDoctor;
}
